#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <unistd.h>

int main(int argc, char const *argv[])
{
    // 1、创建密钥
    key_t key = ftok("/",120);
    if (key == -1)
    {
        perror("创建密钥失败!\n");
        return -1;
    }
    else
    {
        printf("创建密钥成功!\n");
    }


    // 2、根据密钥创建共享内存对象
    int shmid = shmget(key, 4096, IPC_CREAT|0777);
    if (shmid == -1)
    {
        perror("创建共享内存对象失败!\n");
        return -2;
    }
    else
    {
        printf("创建共享内存对象成功!\n");
    }

    // 3、映射共享内存     
    char *p = shmat(shmid, NULL, 0); 

    // 4、访问共享内存空间
    while (1)
    {
        printf("%s\n", p);
        sleep(1);
    }
    

    // 5、解除映射、销毁共享内存空间
    shmdt(p);                       
    shmctl(shmid,IPC_RMID,NULL);

    return 0;
}
